package com.sz.biz.trade.bill.service;

import com.sz.biz.trade.bill.entity.TrdBillingTask;
import com.sz.biz.trade.bill.dto.TrdBillingDetailDto;
import com.sz.biz.trade.bill.dto.TrdBillingTaskQueryDto;
import com.sz.common.base.dto.CommonModel;
import com.sz.common.base.dto.QResultDto;
import com.sz.common.base.dto.QueryParams;
import com.sz.biz.logistics.bill.entity.BillingTaskStatus;

import java.util.List;

/**
 * Function: 账单任务服务 <br>
 * Author: changwentao <br>
 * Date: 2017-07-18 14:09:00
 */

public interface TrdBillingTaskService {

    /**
     * 生成账单
     *
     * @param type                   type
     * @param trdBillingTaskQueryDto trdBillingTaskQueryDto
     */
    String generateBill(int type, TrdBillingTaskQueryDto trdBillingTaskQueryDto);

    /**
     * 重新生成账单
     *
     * @param taskCodes taskCodes
     */
    void regenerate(List<String> taskCodes);

    /**
     * 根据任务编码删除任务
     *
     * @param taskCodes taskCodes
     */
    void batchdeleteByTaskCode(List<String> taskCodes);

    /**
     * 根据任务编码获取任务
     *
     * @param taskCodes taskCodes
     * @return List
     */
    List<TrdBillingTask> findByTaskCodes(List<String> taskCodes);

    /**
     * 根据任务编码获取任务
     *
     * @param taskCode taskCode
     * @return TrdBillingTask
     */
    TrdBillingTask findByTaskCode(String taskCode);

    /**
     * 账单任务列表
     *
     * @param params params
     * @return QResultDto
     */
    QResultDto findBillingTaskList(QueryParams params);

    /**
     * 获取所有账单任务状态
     *
     * @return List
     */
    List<CommonModel> getAllTaskStatus();

    /**
     * 更新账单任务
     *
     * @param billingTask billingTask
     */
    void updateBillingTask(TrdBillingTask billingTask);

    /**
     * 更新任务状态
     *
     * @param taskStatus taskStatus
     * @param taskCodes  taskCodes
     */
    void updateTaskStatus(BillingTaskStatus taskStatus, List<String> taskCodes);

    /**
     * 账单任务详情
     *
     * @param taskCode taskCode
     */
    TrdBillingDetailDto billingTaskDetail(String taskCode);

    /**
     * 修改已经生成账单的客户数量和订单数量
     *
     * @param taskCode              taskCode
     * @param completeOrderQuantity taskCode
     */
    void updateTaskCustomerComplete(String taskCode, Integer completeOrderQuantity);
}
